Insérer une message codé avec Python - Exercice 1

Partie 1 : encodage de l'image avec le message

On donne la bibliothèque et les variables nécessaires ainsi que les fonctions qui permettent de chiffrer le message et de l'insérer dans l'image :

from PIL import Image
image = "tigre.jpg"
image_codee = "tigreCode.bmp"
listeimage = []

def encode64(codein):
    code64 = {"A":"000000", "B":"000001", "C":"000010", "D":"000011", 
              "E":"000100", "F":"000101", "G":"000110", "H":"000111", 
              "I":"001000", "J":"001001", "K":"001010", "L":"001011", 
              "M":"001100", "N":"001101", "O":"001110", "P":"001111", 
              "Q":"010000", "R":"010001", "S":"010010", "T":"010011", 
              "U":"010100", "V":"010101", "W":"010110", "X":"010111", 
              "Y":"011000", "Z":"011001", "a":"011010", "b":"011011", 
              "c":"011100", "d":"011101", "e":"011110", "f":"011111", 
              "g":"100000", "h":"100001", "i":"100010", "j":"100011", 
              "k":"100100", "l":"100101", "m":"100110", "n":"100111", 
              "o":"101000", "p":"101001", "q":"101010", "r":"101011", 
              "s":"101100", "t":"101101", "u":"101110", "v":"101111", 
              "w":"110000", "x":"110001", "y":"110010", "z":"110011", 
              "0":"110100", "1":"110101", "2":"110110", "3":"110111", 
              "4":"111000", "5":"111001", "6":"111010", "7":"111011", 
              "8":"111100", "9":"111101", " ":"111110", ".":"111111"}    
    return code64[codein]
    
def stegano(pixel, code):
    """ Remplace les deux bits de poids faible de chaque composante RVB de 
    pixel par deux bits du code """
    r = (pixel[0]&0b11111100)|(int(code[0])*2+int(code[1]))
    v = (pixel[1]&0b11111100)|(int(code[2])*2+int(code[3]))
    b = (pixel[2]&0b11111100)|(int(code[4])*2+int(code[5]))
    return (r,v,b)

Vous devez insérer votre message secret dans l'image. Un index i est initialisé à 0. Pour chaque pixel de l'image (de la liste dataimage), si l'index i est inférieur au nombre de valeurs dans la liste msg_code, on ajoute à listeimage le pixel de l'image modifiée avec le code du message, sinon, on ajoute simplement le pixel de l'image. On crée une nouvelle image en gardant les dimensions de la précédente et on y place la liste "listeimage". On sauvegarde la nouvelle image (tigreCode.bmp) et on l'affiche.

1. Compléter le code suivant :

msg = "rdv place du Pantheon a 10h demain matin."
msg_code = []
for c in msg:
    msg_code.append(encode64(c))
print("message :", msg)
print("message codé : ", msg_code)
img = Image.open(image)
dataimage = img.getdata()
l, h = img.size
i = 0
for pixel in dataimage :

    # A compléter

Source : https://lesmanuelslibres.region-academique-idf.fr
Télécharger le manuel : https://forge.apps.education.fr/drane-ile-de-france/les-manuels-libres/snt-seconde ou directement le fichier ZIP
Sous réserve des droits de propriété intellectuelle de tiers, les contenus de ce site sont proposés dans le cadre du droit Français sous licence CC BY-NC-SA 4.0